<!DOCTYPE html><html><head><meta charset=utf-8><title>Older Version History</title></head><body><h1> Older Version History</h1><p><a href='index.html'>Back to documentation index.</a></p><p><a id=Version_History></a></p>
<h2>Version History</h2><p>Version 2.0.0-beta3:</p>
<p>The changes in beta 3 from beta 2 include:</p>
<ul>
<li>The main library files were converted to ECMAScript's import/export convention.  The <code>rollup</code> tool
is used to help generate the <code>h3du_min.js</code> file.</li>
<li>HTML documentation included in distribution.</li>
<li>&quot;Norm&quot; methods in H3DU.Math were renamed to use &quot;Normalize&quot; instead.</li>
<li>New <code>convex.js</code> in extras folder generates the convex hull of a set of points.</li>
<li>New <code>interp.js</code> in extras folder provides a cubic B&eacute;zier interpolation function.</li>
<li>New <code>spline.js</code> in extras folder generates piecewise interpolating curves.</li>
<li>New demos added, including demos showing how to generate procedural content using shaders.</li>
<li>Several methods in H3DU.GraphicsPath were reimplemented.</li>
<li>H3DU.BezierCurve and H3DU.BezierSpline are deprecated.</li>
<li>H3DU.CurveBuilder and H3DU.SurfaceBuilder classes were created; they replace now-deprecated
H3DU.CurveEval and H3DU.SurfaceEval classes.</li>
<li>H3DU.MeshBuffer contains many new methods; in exchange, many of the H3DU.Mesh
methods reimplemented in H3DU.MeshBuffer are deprecated.</li>
<li>H3DU.Mesh is considerably deemphasized in this version; that class should only be used
for building meshes, not storing them.</li>
<li>H3DU.Curve and H3DU.Surface were created; these classes represent parametric curves
 and surfaces and offer methods for querying information at a given point on the curve or surface.
 Made several class derive from either class, including H3DU.BSplineCurve, H3DU.BSplineSurface,
 and new class H3DU.PiecewiseCurve.</li>
<li>H3DU.RenderPass3D renamed to H3DU.RenderPass.</li>
<li>Deleted fromBasic and fromBasicTexture methods from H3DU.PbrMaterial.</li>
<li>Added JOINTS and WEIGHTS constants to H3DU.Semantic.</li>
<li>Preliminary support for occlusion maps.</li>
<li>Default diffuse/albedo in Material and PbrMaterial is now (1,1,1,1).</li>
<li>New H3DU.BufferAccessor class represents a single vertex buffer.</li>
<li>Many methods outside H3DU.Mesh now return H3DU.MeshBuffer instead of H3DU.Mesh.</li>
<li>Bug fixes.</li>
</ul>
<p>Version 2.0.0-beta2:</p>
<p>The changes in beta 2 from beta 1 include:</p>
<ul>
<li>Added H3DU.PbrMaterial class and supported physically-based shading in the default shader.</li>
<li>H3DU.Shape objects contain H3DU.PbrMaterial by default.</li>
<li>Extras folder contains a glTF loader, which is preliminary and incomplete.</li>
<li>H3DU.Scene3D will create a WebGL 2 rendering context if possible and supported by the browser.</li>
<li>H3DU.MeshBuffer stores vertex data by semantic (such as position, normal or texture coordinates), rather than by name.</li>
<li>The new H3DU.Semantic class contains constants for attribute and uniform semantics.</li>
<li>The new H3DU.TextureInfo class is a lightweight class for storing a texture's settings, but not its data.</li>
<li>H3DU.ShaderInfo class can now accept H3DU.TextureInfo objects as uniform values.</li>
<li>H3DU.Material can accept a parameter object in the constructor as it can in the setParams method, similarly to the
new H3DU.PbrMaterial class.</li>
<li>Added fromBasic and fromBasicTexture methods to H3DU.Material class.</li>
<li>Many new methods were added to the H3DU.Math class, including methods to add and
 subtract 4-element vectors, to clamp vectors, and to convert to and from linear RGB colors,
 as well as vec3proj, vec4proj, mat3invert, and vec3fromWindowPoint methods.
 The frustumHasBox method was improved.</li>
<li>The shapeCount, getShape, setShape, and copy methods were added to H3DU.ShapeGroup.</li>
<li>New H3DU.CubeMap class holds information on the textures that make up a cube map.
 However, cube maps are not yet supported in the default shader (its code is
 currently commented out)</li>
<li>In the H3DU.GraphicsPath extra, added methods for high-level shapes and path
 interpolation and improved code on path triangulation.</li>
<li>H3DU.TextFont extra supports multichannel signed distance field fonts.</li>
<li>Several new demos were added.</li>
<li>Some methods were removed: setMaterialParams methods from both H3DU.Shape and H3DU.ShapeGroup; mapTexture and mapTexturesAll methods from TextureLoader; forShader method from H3DU.Material.</li>
<li>Renamed setOrientation and multOrientation in H3DU.Transform to setRotation and multRotation, and deprecated the old names.</li>
<li>Bug fixes.</li>
</ul>
<p>Version 2.0.0-beta1:</p>
<p>There are many, many changes to version 2.0.0-beta1 from version 1.5.1. Here are some of them, including the most important ones.</p>
<ul>
<li>All classes in the main library are moved to a new namespace called <code>H3DU</code>.  For example, <code>Shape</code> is now <a href="H3DU.Shape.html">H3DU.Shape</a> and <code>Mesh</code> is now <a href="H3DU.Mesh.html">H3DU.Mesh</a>.  Many classes in the &quot;extras&quot; directory are also moved to the <code>H3DU</code> namespace.</li>
<li><code>Scene3D</code>, now <a href="H3DU.Scene3D.html">H3DU.Scene3D</a>, is no longer meant to be a scene graph of objects to draw. That job now belongs to the new <a href="H3DU.Batch3D.html">H3DU.Batch3D</a> class. Scene3D's <code>render</code> method now takes an array of <code>Batch3D</code>s to render. For compatibility, though, the methods allowing it to manage 3D models and the coordinate system, such as <code>makeShape</code> and <code>setPerspective</code>, can still be used until <code>H3DU.Scene3D</code> renders a custom <code>H3DU.Batch3D</code>. This compatibility behavior may be dropped in the future.</li>
<li>Alpha is disabled in WebGL contexts created with the <a href="H3DU.html#H3DU.get3DOr2DContext">H3DU.get3DOr2DContext</a> method.</li>
<li>The <code>Scene3D</code> <a href="H3DU.Scene3D.html#H3DU.Scene3D_useProgram">H3DU.Scene3D#useProgram</a> method was deprecated and now does nothing.</li>
<li>New H3DU.RenderPass3D class holds information about how a batch of 3D models is to be rendered. It replaces the <code>Scene3D</code> <a href="H3DU.Scene3D.html#H3DU.Scene3D_useFilter">H3DU.Scene3D#useFilter</a> method, which now does nothing.</li>
<li>New <a href="H3DU.FrameBufferInfo.html">H3DU.FrameBufferInfo</a> class holds information about a frame buffer; it replaces <a href="H3DU.FrameBuffer.html">H3DU.FrameBuffer</a>.</li>
<li>The <code>BufferedMesh</code>, <code>FrameBuffer</code>, and <code>ShaderProgram</code> classes are deprecated because they are too tightly coupled with a particular WebGL context. Instead, use <a href="H3DU.MeshBuffer.html">H3DU.MeshBuffer</a>, <a href="H3DU.FrameBufferInfo.html">H3DU.FrameBufferInfo</a>, and <a href="H3DU.ShaderInfo.html">H3DU.ShaderInfo</a>, respectively, which are not coupled to WebGL contexts.</li>
<li>Rendering can make use of vertex array objects internally, if supported by the WebGL implementation.</li>
<li>The <a href="H3DU.Shape.html">H3DU.Shape</a> object is no longer coupled to vertex buffers.</li>
<li>The <a href="H3DU.LightSource.html">H3DU.LightSource</a> class now supports a radius of the light.</li>
<li>The <a href="H3DU.TextureLoader.html">H3DU.TextureLoader</a> class was added for loading textures; a single object of this class can load and upload images from multiple WebGL contexts. This is unlike <code>BufferedMesh</code>, <code>FrameBuffer</code>, and <code>ShaderProgram</code>, which are tied to the WebGL context.</li>
<li><code>GLMath</code>, now <a href="H3DU.Math.html">H3DU.Math</a>, was expanded with many new methods. The documentation for it is now very detailed. New methods include <a href="H3DU.Math.html#H3DU.Math.vec3perp">H3DU.Math.vec3perp</a>, <a href="H3DU.Math.html#H3DU.Math.vec3toWindowPoint">H3DU.Math.vec3toWindowPoint</a>, and <a href="H3DU.Math.html#H3DU.Math.mat4projectVec3">H3DU.Math.mat4projectVec3</a>.</li>
<li>Two new classes in the &quot;extras&quot; folder support 2D text rendering and texture atlases (as sprite sheets), namely, <a href="H3DU.TextFont.html">H3DU.TextFont</a> and <a href="H3DU.TextureAtlas.html">H3DU.TextureAtlas</a>.</li>
<li>The &quot;doc&quot; folder contains the documentation to the library in the form of Markdown text files.</li>
<li>The Camera class, now <a href="H3DU.Camera.html">H3DU.Camera</a>, was rewritten.</li>
<li>A build script was included in the repository. This build includes a style checker which is run on the library's JavaScript files.</li>
<li>Many methods were added to many classes. Some methods that didn't return a value now return the value of the object called on, for example, the <code>clear</code> method of <code>H3DU.Scene3D</code>.</li>
<li>New demos, including <em>spinbox.html</em> and <em>quatlerp.html</em>.  For example, the <em>gears.html</em> demo was moved from the separate &quot;html-gears&quot; repository to here. Other demos were expanded or rewritten. Viewport <code>meta</code> tags were added to the demos.</li>
<li>The underlying code used in <code>H3DU.toGLColor</code> was rewritten.  In particular, the &quot;#RRGGBBAA&quot; format is now supported.</li>
<li>The JavaScript source code better conforms to a uniform code style.</li>
<li>The experimental 2D canvas renderer in <em>surfaces2d.html</em>, was abandoned.</li>
<li>Added <code>dispose</code> method to <code>H3DU.Scene3D</code>.</li>
<li>Added <code>createPointedStar</code> and <code>createLathe</code> methods to <code>H3DU.Meshes</code>.</li>
<li>Added <code>getBounds</code> and <code>toLinePath</code> methods to <a href="H3DU.GraphicsPath.html">H3DU.GraphicsPath</a>, an extra, as well
as an extra that adds methods that compute the intersection, difference, union, and XOR of two
polygons. Path triangulation now supports polygons with holes.</li>
<li>The default light configuration is no lights when creating a <a href="H3DU.LightSource.html">H3DU.LightSource</a>. The exception, for compatibility purposes, is when using a <a href="H3DU.Scene3D.html">H3DU.Scene3D</a> without rendering a custom <code>Batch3D</code>, in which case the default is one light source with its default values.</li>
<li>The default value for specular materials (<a href="H3DU.Material.html">H3DU.Material</a>) is now (0.1, 0.1, 0.1). The default value for shininess is now 32.</li>
<li>The Mesh class no longer supports multiple primitive types (lines, triangles, points). Using different modes that use the same primitive type (for example, TRIANGLE_FAN and QUAD_STRIP) in the same mesh is still supported.</li>
<li>Many of the tutorials were edited heavily to accommodate the new version. The <code>GraphicsPath</code> tutorial was added.</li>
<li>There were also numerous bug fixes.</li>
<li>A known issue: When using the <a href="H3DU.Camera.html">H3DU.Camera</a> in conjunction with the compatibility behavior of <a href="H3DU.Scene3D.html">H3DU.Scene3D</a>, only one side of the scene will appear lighted by default.</li>
</ul>
<p>Version 1.5.1:</p>
<ul>
<li>Fixed bug in normal calculation</li>
<li>Make certain changes to the demos to ensure compatibility with the
next major version</li>
<li>Fix curve returned by GraphicsPath#getCurves() so that closed paths
remain smooth at their endpoints when a curve tube is generated from
them</li>
</ul>
<p>Version 1.5:</p>
<ul>
<li>Add support for specular maps and normal maps, including
in the JSON mesh format and MTL material format.</li>
<li>To support normal maps, extra methods for bitangents and
tangents were added to the Mesh class.</li>
<li>Added six new demos and modified several others</li>
<li>Support 24-bit color versions of TGA files</li>
<li>Scene3D now does frustum culling of its shapes</li>
<li>Fixed vertex normal calculation in the recalcNormals()
method of the Mesh class.</li>
<li>Allow two-element arrays to be passed to the Mesh class's
texCoord3() method.</li>
<li>Add getBoundingBox method to the Mesh class.</li>
<li>Add the setVisible method to the Shape and ShapeGroup
classes.</li>
<li>Allow reading OBJ files with negative reference numbers</li>
<li>Add path.js (2D graphics paths) to extras</li>
<li>Added an &quot;axis&quot; parameter to the SurfaceOfRevolution
constructor and fromFunction method</li>
<li>Add vec3negate, vec3negateInPlace, vec3mul, and plane
and frustum methods to the GLMath class</li>
<li>Deprecate the practice of setting shape materials directly
to textures (calling the Shape#setMaterial method with a
Texture object rather than a Material object).</li>
<li>Deprecate certain properties of Transform that shouldn't
be exposed as a public API and add corresponding methods
for those properties</li>
<li>Fix getPromiseResults</li>
<li>Documentation added in many places</li>
<li>&quot;meshexamples.md&quot; demo added and other demos edited
or rearranged</li>
<li>Other changes and fixes</li>
</ul>
<p>Version 1.4:</p>
<ul>
<li>Fixed camera.js issues (thanks to the user &quot;the-sz&quot; on GitHub)</li>
<li>Added an <em>extras</em> folder with the following new scripts:<ul>
<li>A CurveTube class for creating tubes from 3D curves</li>
<li>A parametric evaluator for surfaces of revolution and
3 kinds of curves (<em>evaluators.js</em>)</li>
<li>A frame counter (moved from the demos)</li>
<li>A JSON converter and loader for 3D meshes (<em>meshjson.js</em>)</li>
</ul>
</li>
<li>Made <em>objmtl.js</em> compatible with more MTL files</li>
<li>Math.sin/Math.cos pairs were replaced with optimized
versions throughout the code</li>
<li>Add mat4transformVec3 method to GLMath</li>
<li>Add BSplineCurve class</li>
<li>Deprecate vertexBezier, normalBezier, colorBezier, and texCoordBezier
methods of CurveEval and SurfaceEval</li>
<li>Optimize SurfaceEval's evalSurface method when generating
triangles</li>
<li>Add primitiveCount and enumPrimitives methods to the Mesh
class</li>
<li>Add setMaterial and removeShape methods to the ShapeGroup class</li>
<li>Default shader program now uses <code>modelViewMatrix</code> instead of
separate <code>world</code> and <code>view</code> uniforms</li>
<li>Fix JSON issues in H3DU.loadFileFromUrl method</li>
<li>Many new demos added</li>
<li>Add graphics filters tutorial and expanded several other tutorials</li>
</ul>
<p>Version 1.3.1:</p>
<ul>
<li>Fixed touch events in some of the interactive demos</li>
<li>Fixed issues with BezierCurve, BezierSurface</li>
<li>Robustness improvement in autonormal feature of SurfaceEval</li>
<li>Correctness and other fixes</li>
</ul>
<p>Version 1.3:</p>
<ul>
<li>Camera class rewritten again, but backwards compatible with
version 1.0</li>
<li>Add vec3add, vec3sub, vec3copy, vec3assign, vec4assign methods
to GLMath</li>
<li>Fix quatInvert method and optimize mat4inverseTranspose
method of GLMath</li>
<li>Add reverseNormals method to GLMath</li>
<li>Add createCanvasElement, getTimePosition, and newFrames methods to GLUtil</li>
<li>Deprecate createCanvas method of GLUtil</li>
<li>Improve renderLoop method of GLUtil</li>
<li>Improved specular highlights</li>
<li>Allow coordinate arrays in vertex2 and vertex3 methods of Mesh class</li>
<li>Resolve some autonormal degenerate cases in SurfaceEval class</li>
<li>Add getCount method to Lights class</li>
<li>Add face culling, auto resize, and pixel depth methods to Scene3D class</li>
<li>Add getClientAspect method to Scene3D class</li>
<li>Other fixes and improvements</li>
</ul>
<p>Version 1.2.1:</p>
<ul>
<li>Fix bug that occurs when a shape derived from a mesh that defines its own
colors is drawn before a shape derived from a mesh that doesn't define its own colors</li>
</ul>
<p>Version 1.2:</p>
<ul>
<li>Support TGA textures</li>
<li>Camera class rewritten and support added for the mouse wheel
and middle mouse button</li>
<li>Lines and points supported in OBJ files</li>
<li>Support loading custom textures from byte arrays</li>
<li>Add method to create capsule shapes in Meshes class</li>
<li>Mesh builder (vector3 method) avoids adding degenerate triangles</li>
<li>Optimizations and bug fixes</li>
</ul>
<p>Version 1.1:</p>
<ul>
<li>Add frame.js, a frame counter helper used in some of the demos</li>
<li>Add quatInvert method to the GLMath class</li>
<li>Fix texture mapping bugs</li>
<li>Expand use of the color3 method of the Mesh class</li>
<li>Optimize setUniforms method of the ShaderProgram class</li>
<li>Add movePosition method of the Transform class</li>
<li>New methods in the ShapeGroup and Scene3D classes</li>
<li>Bug fixes</li>
</ul>
<p>Version 1.0:</p>
<ul>
<li>Adds setOrtho2DAspect and setOrthoAspect methods to Scene3D</li>
<li>Adds mat4TransposeInPlace method and two constants to GLMath</li>
<li>Renames fromEuler and toEuler methods in GLMath to fromTaitBryan
and toTaitBryan</li>
<li>Modifies the Lights class</li>
<li>Allows alpha component in material diffuse</li>
<li>Optimizes setting uniforms in shader programs</li>
<li>Adds vertex2 method to Mesh class</li>
<li>New classes: Transform and ShapeGroup</li>
<li>Most methods that affect transforms removed, and their functionality
now uses a new getTransform method and the Transform class</li>
<li>Bug fixes</li>
</ul>
<p>Version 0.2:</p>
<ul>
<li>First Code Project release</li>
</ul><p><a href='index.html'>Back to documentation index.</a></p></body></html>
